package ar.com.algotres.tpdos.modelo.tablero;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import ar.com.algotres.tpdos.modelo.disparos.Disparo;
import ar.com.algotres.tpdos.modelo.disparos.DisparoMinaPorContacto;
import ar.com.algotres.tpdos.modelo.fisica.CoordenadasDePosicioInvalidaException;
import ar.com.algotres.tpdos.modelo.naves.FabricaDeNaves;
import ar.com.algotres.tpdos.modelo.naves.Nave;

public class VigilanciaMarina {

	private Set<Nave> navesVigiladas;
	private Map<Disparo, Object> navesVigiladasPorDisparos;

	public VigilanciaMarina() {
		super();
		navesVigiladasPorDisparos = new HashMap<>();
		navesVigiladas = new HashSet<>();
		this.iniciarVigilancia();
	}

	private boolean esVigilada(Nave nave) {
		Boolean es = false;
		for (Nave vigilada : navesVigiladas) {
			if (vigilada.equals(nave)) {
				es = true;
			}
		}
		return es;
	}

	public boolean hundida(Nave nave) {
		return nave.estasHundida();
	}

	private void iniciarVigilancia() {
		try {
			Nave vigilada = FabricaDeNaves.crearDestructor();
			navesVigiladasPorDisparos.put(new DisparoMinaPorContacto(),
					vigilada);
			navesVigiladas.add(vigilada);
		} catch (CoordenadasDePosicioInvalidaException e) {
			e.printStackTrace();
		}
	}

	public boolean puedeDipararEl(Disparo disparo, Nave nave) {
		boolean puede = true;
		if (esVigilada(nave)) {
			puede = nave.equals((navesVigiladasPorDisparos.get(disparo)));
		}
		return puede;
	}
}
